#include <iostream>
//
//class A
//{
//	
//public :
//	virtual void func(int val = 1) { std::cout << "A->" << val << std::endl; }
//	virtual void test() { func(); }
//};
//class B : public A
//{
//	
//public :
//	void func(int val = 0) { std::cout << "B->" << val << std::endl; }
//};
//
//int main(int argc, char* argv[])
//{
//	B* p = new B;
//	p->test();
//	return 0;
//}

class A

{

public:

    A() :m_iVal(0) { test(); }

    virtual void func() { std::cout << m_iVal << " "; }

    void test() { func(); }

public:

    int m_iVal;

};



class B : public A

{

public:

    B() { test(); }

    virtual void func()

    {

        ++m_iVal;

        std::cout << m_iVal << " ";

    }

};



int main(int argc, char* argv[])

{

    A* p = new B;

    p->test();

    return 0;

}